package com.epoch.wx.controller;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.epoch.base.annotation.ControllerBind;
import com.epoch.wx.annotaion.IgnoreAuth;
import com.epoch.wx.base.ApiBaseController;
import com.epoch.wx.entity.WechatRefundApiResult;
import com.epoch.wx.util.XmlUtil;
/**
 * 支付接口
* <p>Title: ApiPayController.java</p>  
* <p>Description: </p>  
* @author 张清磊
* @QQ 544188838
* @date 2018年12月22日
 */
@ControllerBind(controllerKey = "/api/pay")
public class ApiPayController extends ApiBaseController{
	
	/**
	 * 微信订单回调接口，只提供给微信调用
	 * 以下重要：
	 * 订单号，也就是说给微信传递的out_trade_no(这是在创建订单的时候传递的)，如果项目中存在多种支持方式，
	 * ABC三种支付，都是用微信支付，为了区分这三种业务，每个业务的订单规则也应该设置不同。最好是业务前缀+
	 * 订单号码。这样，在回调的时候，通过前缀就可以判断是哪种业务类型，做具体的业务处理了。
	 */
	@IgnoreAuth
	public void notifyBack() {
		HttpServletRequest request = getRequest();
		HttpServletResponse response = getResponse();
		try {
			request.setCharacterEncoding("UTF-8");
			response.setCharacterEncoding("UTF-8");
			response.setContentType("text/html;charset=UTF-8");
			response.setHeader("Access-Control-Allow-Origin", "*");
			InputStream in = request.getInputStream();
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = in.read(buffer)) != -1) {
				out.write(buffer, 0, len);
			}
			out.close();
			in.close();
			// xml数据
			String reponseXml = new String(out.toByteArray(), "utf-8");
			WechatRefundApiResult result = (WechatRefundApiResult) XmlUtil.xmlStrToBean(reponseXml,
					WechatRefundApiResult.class);
			String result_code = result.getResult_code();
			String out_trade_no = result.getOut_trade_no();//订单号
			//失败
			if (result_code.equalsIgnoreCase("FAIL")) {
				
			}else {
				
			}
			response.getWriter().write(setXml("SUCCESS", "OK"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	// 返回微信服务
		public static String setXml(String return_code, String return_msg) {
			return "<xml><return_code><![CDATA[" + return_code + "]]></return_code><return_msg><![CDATA[" + return_msg
					+ "]]></return_msg></xml>";
		}

		// 模拟微信回调接口
		public static String callbakcXml(String orderNum) {
			return "<xml><appid><![CDATA[wx2421b1c4370ec43b]]></appid><attach><![CDATA[支付测试]]></attach><bank_type><![CDATA[CFT]]></bank_type><fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[Y]]></is_subscribe><mch_id><![CDATA[10000100]]></mch_id><nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str><openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid> <out_trade_no><![CDATA["
					+ orderNum
					+ "]]></out_trade_no>  <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code><sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign><sub_mch_id><![CDATA[10000100]]></sub_mch_id> <time_end><![CDATA[20140903131540]]></time_end><total_fee>1</total_fee><trade_type><![CDATA[JSAPI]]></trade_type><transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id></xml>";
		}
}
